package FileLearn;



import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-05 18:28
 * @description File类的使用
 *
 * 1.File类的一个对象，代表一个文件或文件夹
 * 2.java.io包下
 * 3.File类中涉及到关于文件或文件夹的创建、删除、重命名、修改时间、文件大小等方法
 *   并未涉及到写入或读取内容操作，读写操作需要使用IO流
 * 4.后续File类的对象会作为参数传到流的构造器中，指明文件读写的终点
 *
 *
 */
public class FileTest {
    /**
     * 1.如何创建File类的实例
     *
     * 2.相对路径：
     *   绝对路径：
     *3.路径分隔符：win:"\\" linux:"/"
     *
     */
    @Test
    public void test1(){
        //构造器1
        //相对于当前module，在main方法中在当前project下
        File file=new File("hello.txt");
        File file1=new File("D:\\Java Learn\\Java学习电子书\\01.笔记\\ceshi.txt");

        System.out.println(file);
        System.out.println(file1);//此时仅是内存中的对象

        //构造器2
        File file2 =new File("D:\\Java Learn","Java学习电子书");
        System.out.println(file2);

        //构造器3
        File file3=new File(file2,"bi.txt");
        System.out.println(file3);
    }

    /**
     *
     * File常用方法的使用
     *
     */
    @Test
    public void test2(){
        String path="D:\\Java Learn\\IOLearnTestFile";
        File f1=new File("hello.txt");
        File f2=new File(path+"\\hi.txt");

        System.out.println(f1.getAbsoluteFile());
        System.out.println(f1.getPath());
        System.out.println(f1.getName());
        System.out.println(f1.getAbsoluteFile().getParent());
        System.out.println(f1.length());
        System.out.println(new Date(f1.lastModified()));

        System.out.println("**************");

        System.out.println(f2.getAbsoluteFile());
        System.out.println(f2.getPath());
        System.out.println(f2.getName());
        System.out.println(f2.getParent());
        System.out.println(f2.length());
        System.out.println(f2.lastModified());

        //以下两个方法适用于文件目录
        File f3=new File(path);
        String[] flist=f3.list();
        for (String f:flist){
            System.out.println(f);
        }

        File[] filelist=f3.listFiles();
        for (File fi :filelist){
            System.out.println(fi);
        }

        //boolean renameTo(File dest) //把文件重命名为指定的文件路径
        //成功条件：需要f4存在且f5不存在
        File f4=new File("D:\\Java Learn\\IOLearnTestFile\\test");
        File f5=new File("D:\\Java Learn\\IOLearnTestFile\\testinit");
        System.out.println(f4.renameTo(f5));
    }

    @Test
    public void test3(){
        String path="D:\\Java Learn\\IOLearnTestFile\\";
        File  f1=new File(path+"test1.txt");

        System.out.println(f1.isDirectory());//是否文件夹
        System.out.println(f1.isFile());//是否文件
        System.out.println(f1.exists());//是否存在
        System.out.println(f1.canRead());//是否可读
        System.out.println(f1.canWrite());//是否可写
        System.out.println(f1.isHidden());//是否隐藏

        //文件的创建
        File f2=new File(path+"test2.txt");
        try {
            if(!f2.exists())
            f2.createNewFile();
            else
                //删除时里面不能有东西
                f2.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void test4(){
        String path="D:\\Java Learn\\IOLearnTestFile\\";
        File fo=new File(path+"test2\\test3");
        //创建文件夹--一层
        if(fo.mkdir()){
            System.out.println("mkdir成功");
        }
        //创建文件夹--父文件夹也创建
        if(fo.mkdirs()){
            System.out.println("mkdirs成功");
        }
    }
}
